23

» WarCraft 3 / Настройка модели

Похожие вопросы:

ответ
Редактируй
UI\SoundInfo\AnimLookups.slk
UI\SoundInfo\AnimSounds.slk
Откроешь их, посмотри как все устроено. Разберешься.
Не благодари.
ответ
Darknessay:
Hate:
через мдлвис можно делать видимость поверхностям, массово, МЕ для этого не нужен
Не замечал такой функции. Где она?
ответ
~8gabriel8:
Достаточно низкие настройки?
Увеличил размер с 100х100 до 128х128 и пересчитал границы у модели:

23

» WarCraft 3 / Проблемы с редактором карт

Похожие вопросы:

ответ
XGM Bot:
Похожие вопросы:

ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю

ответ
Проблема решена. Я сделал так: Удалил все триггеры и потом по папочке восстанавливал, когда нашли в чем проблема удалили триггер и все заработало, спасибо за помощь!

23

» WarCraft 3 / Нестандартная карта путей

Похожие вопросы:

ответ
vlad2010pilot, как изменить текст Предметы я уже написал.
А то что ты хочешь изменить (Меню паузы или Таблица рекордов) лежит:
Граница - UI\Widgets\EscMenu\Human\editbox-border.blp
Кнопка развертывания - UI\Widgets\Glues\Gluescreen-Scrollbar-DownArrow.blp
Кнопка сворачивания - UI\Widgets\Glues\Gluescreen-Scrollbar-UpArrow.blp
Фон - UI\Widgets\EscMenu\Human\editbox-background.blp
ответ
Есть программа, но не на этом сайте. Названия не помню, поищи на Дотерских сайтах по вару. Возможность есть.
ответ
Резюмируя:
  • стремиться создавать объекты не на карте, а в триггерах, сохраняя ссылки на нужные из них;
  • там, где в гуи открываются окна со списком из РО, использовать джасс и вводить равкод, а там, где список расставленных на карте юнитов, использовать переменные;
  • в РО с полями, где указаны объекты, работать через Shift+Enter и вводить равкод, чтобы не открывать список.
*Равкод в РО можно посмотреть, нажав Ctrl+D

23

» WarCraft 3 / Как сделать превращение?

Похожие вопросы:

ответ
Что за ахинея? Какой дум гуард?
Морфы настраивайте так как они были настроены у дефолтных героев \ юнитов, герой должен превращаться только в героя, обычный юнит - только в обычного юнита, здание только в здание! Если вам нужно чтобы вместо героя появился каконибудь крип ( не герой ) используйте ульт панды пивовара.
Делайте морф из метаморзфозы демонхантера, делайте все как было сделано у демонхантера, тогда оно будет работать, надеюсь понятно?:
Про побочные эффекты морфов и прочее есть статья - ссылка
ответ
~8gabriel8:
Можешь на основе способности Тёмный сделать
ответ
Steal nerves:
так вроде там морф (спец абилка). после естественной смерти юнит морфится (событие смерти никак не отслеживается). И это легко отслеживается через "приводит в действие".
используй всегда дебаги, выводи на экран. я тоже не всегда знаю, проверяю
подробные абилки
Феникс 'AHpx' - вызывает феникса (можно указать кол-во вызванных). Появляется рядом с кастером. Может вызвать безграничное число птиц. Но есть один нюанс со фениксом - у него есть способность 'Превращение в феникса' Aphx, которое после гибели превращает яйцо. Эта способность не позволяет призывать больше одной жар-птицы. Нельзя отследить кастера - того кто призвал эту птицу (debug показывает что феникс призывает феникса, то есть он сам себя призвал)
Превращение в феникса 'Aphx' - морф работает при смерти. У фенникса каждый раз становится хп меньше (так специально сделали в РО: у феникса отрицательный реген), и когда умрет естественной смертью (не от руки врагов), тогда превращается в яйцо (такой цикл). Яйцо просуществует несколько секунд (можно задать длительность морфа, если задать 0.00 - постоянный морф). После из яйца рождается феникс.
ответ
~8gabriel8:
Интересно про звук смерти, ранее на это внимания не обращал. Но вообще сами модели не менял, просто сделал копии модели портрета для всех игровых вооружённых моделей.

Проверил звук предсмертного крика, похоже на проблемы с самими вооружёнными моделями, а именно звук смерти не привязан к кости и выставлен не на то время анимации. Потому что не только звук проигрывается позже, но и при смерти одного бойца, проигрывания крика в период разложения тела, а потом смерти другого бойца, вскоре опять кричит первое тело. Но посмотрю модели опять позже.
Как ты мог заметить, работаю над картой лишь по чуть-чуть вечерами. Потому что много дел, банально до тебя очередь доходит лишь перед сном. Поэтому проверяй и тестируй работу триггеров уж самостоятельно, ну то есть всё, как у нас обычно происходит)
В этот раз с триггерами вроде всё закончил.
Приказы на выкидывание/передачу предмета из инвентаря не получилось отследить, по крайней мере проверка не показала, что это приказ Щелчок правой кнопкой мыши, потому сделал костыльные методы. Теперь система состоит из 5 триггеров:
  • Первый триггер отлавливает использование оружия, чтобы в нём не срабатывали события костыльных триггеров на потерю предмета, устанавливаю в начале логической переменной значение Да. Костыльные триггеры срабатывают, лишь когда значение переменной Нет. Потом циклом по А просматриваем слоты инвентаря юнита, когда в слоте будет лежать используемое оружие, присваеваем его номер переменной, запоминаем в переменную тип предмета и уничтожаем его, обнулив те значения, которые мы заблаговременно запомнили. Далее соотносится каждое оружие с типом предмета, если совпало, то создаём в запомненном слоте аналог Разоружиться для этого оружия и накидываем соответствующий Тёмный. И потом опять цикл проверки слотов, кроме того, где использованное оружие, но уже цикл по В, так как два цикла по одному значению в одном триггере обычно сбоят. Этот цикл проверяет остальные предметы на разные Разоружиться, если вдруг юнит просто меняет, например, пистолет на автомат, и заменяет Разоружиться соответствующим оружием. В самом конце логическую переменную устанавливаем на Нет;
  • Второй триггер реагирует на использование Разоружиться, в нём тоже запоминаем слот и тип предмета перед удалением, потом даём юниту соответствующее оружие, а установка безоружного Тёмного для уменьшения объёма выполняется в костыльном триггере;
  • Третий триггер заменяет Разоружиться у бойца на соответствующее оружие, если оно было передано ему другим бойцом;
  • Четвёртый триггер устанавливает безоружного Тёмного, когда юнит теряет этот предмет, а заодно назначает переменную для предмета и запускает минимальный таймер, что необходимые для пятого триггера;
  • Пятый триггер проверяет через минимальное время, есть ли предмет на карте, так как при передаче кому-то Разоружиться было бы удалено. Если бы был удалён, то тип предмета не определялся бы, триггер не выполнился бы по условию. Далее запоминается тип предмета и его локация, он удаляется, а на его месте создаётся соответствующее оружие.

23

» WarCraft 3 / Нестандартные Модели.

Похожие вопросы:

ответ
Еще проблема может бить в отсутствии текстур для модели где-то, в неправильном импорте (проверь пути файлов).
Вообще я не спец по кампаниям, но попробуй убрать все из карт и кинуть в общее.
ответ
Мне кажется, что добавить простенькую анимацию исчезновения, длинною в кадр было бы самым разумным и простым решением. Научу в личке, если хочешь.
ответ
Куда угодно, но путь к папке и путь к программе (если не ошибаюсь) не должен содержать кириллицу.
ответ
~8gabriel8:
Смотри карту: xgm.guru/files/100/219921/comments/408338/0.w3x
Там для героев созданы их копии с другой моделью и нестандартные способности на основе способности Тёмный, которая заменяет юнита на указанного другого. Такой вариант не меняет имя героя, порядок предметов в инвентаре, кулдаун на предметах и способностях, но что-то упоминали ранее о возможных глюках с наложенными заклинаниями. Триггерно при использовании способности не на иллюзии героя добавляем ему нестандартную способность нужного типа.
Вариант с заменой юнита, примерно как ты описал, приведёт к сбросу имени, опыта, способностей, кулдаунов, предметов и заклинаний.
Вариантом морфа героя через руны не умею пользоваться.
Вариант с заменой текстуры персонажа через способность Вырвать дерево требует замены текстур деревьев в карте, а это плохо, так как героев много. Ещё это подразумевает умение работать с 3D-редакторами, которого, как предполагаю, у тебя нет.

23

» WarCraft 3 / Перенос всех нестандартных объектов из карты

Похожие вопросы:

ответ
Это тема для блога, а не академии.
ответ
Переменная "точка" это не просто два числа.
Она хранит объект - ссылку на место в памяти, где хранятся эти два числа.
Пока ты не вызовешь RemoveLocation, эта точка будет висеть в памяти.
Когда ты присваиваешь переменной новое значение, старый объект не удален, но появляется новый объект с другими координатами, и твой триггер создает 200 точек в секунду.
Чтобы поменять координаты не создавая новый объект, есть функция MoveLocation
ответ
~8gabriel8:
Leer_Lie, ну вот пробуй другие редакторы и проверяй. А вообще можешь просто создать дополнительную кампанию из этих карт.
ответ
Кложуры и передача данных с их помощью в нативные каллбеки от форгрупа и таймеров через анонимные функции.
Динамическая природа языка, позволяющая в любой момент времени заменить любую функцию чем-то другим. Хороший пример - оборачиваем вызов RemoveUnit своей оберткой и делаем какие-то действия перед тем как вызвать настоящий RemoveUnit.
Своеобразное но рабочее ООП.
Таблицы которые одновременно и массив и хештаблица и ассоциативный массив и при этом очень быстро работают.
Передача и хранение функций в параметрах и переменных.
Передача массивов в параметрах.
Метатаблицы и метаметоды, позволяющие переопределять поведение таблиц в разных ситуациях - добавление и получение элементов, различные операторы, вся эта фигня. Пример - можно запилить "класс" вектор и пользоваться векторной математикой без костылей, переопределив для векторов операторы сложения, вычитания, умножения и так далее.

Вобще, давно пора завести статью на эту тему и собирать там все мелкие и большие фишечки и возможности Lua в сравнении с JASS.

23

» WarCraft 3 / Размножение

Похожие вопросы:

ответ
Ухаха. Парень, ознакомься, что такое утечки, прикрепление в помощь.

23

» WarCraft 3 / Характеристика предмета

Похожие вопросы:

ответ
Там же есть функция, мол создать случайный предмет уровня N, и всё
ответ
Либо shift + enter, либо редактированием слк.
ответ
Roy Mustang:
Chosen2:
p.s Посмотрел карту, так а как вы на поясе установили отрицательное значение?
Shift+клик по строке где статы позволяет установить отрицательные значение практически у всего что есть в варике в РО (если не работает в твоем случае то вкл эту функцию вот здесь )
ответ
  1. Есть функция проверки кол-ва ловкости героя, при этом можно посмотреть сколько ловкости от характеристик и сколько от предметов, исходя из кол-ва ловкости вручать предметные абилки на атаку.
  2. Самое простое - апгрейды, триггерно повышать уровень улучшения которое будет действовать на героя, увы это не идеальный вариант, но один из самых просты. Так же вручать способности предметов на регенерацию здоровья \ маны.
  3. Напрямую - никак, есть место только под 5 способностей. Делать свою систему прокачки способностей из спеллбука или какие либо еще способы, на подобии рпгшных карт.

23

» WarCraft 3 / Сохранение Игры

Похожие вопросы:

ответ
конечно
пруф
а вообще можно вспомнить кампанию людей - там есть миссия по защите Стратхольма, или как та деревня называлась - и там есть таймер, который нормально сохраняется
ответ
Закрываем вопрос, причина была в снятой галочке про "включение локальных данных"
Лучший вариант: Datamanager+EnableLocalFiles
ответ
А её и не надо создавать
Смотри в сторону счетчика игр (ливнул/ доиграл до конца)
в коде всё есть и хорошо разжевано, что непонятно - спрашивай
Только тут начало идёт от какого-то 1940 (не помню число, надо с 0 начать считать), как начнёшь ковырять, сразу всё поймёшь

23

» Unity / Анимация

Похожие вопросы:

ответ
Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
ответ
Разве это не показано в этом коде?
ответ
Чтобы переместить костную анимацию в движок, сначала надо перепечь анимацию с рига на кости

23

» WarCraft 3 / Как сделать видимость за игроком?

Похожие вопросы:

ответ
в константах настраивается
там есть таблица опыта
ответ
Steal nerves:
была где-то тема в точь-точь у нас на сайте xgm.guru/forum/showthread.php?t=60325
вот скинул кучу все что связано с видимостью

23

» WarCraft 3 / Условия победы/поражения

Похожие вопросы:

ответ
Editor, игроков на карте 12
для каждого делать......
ответ
надо создавать несколько групп для зданий и группировывать их если игроки входят в союз между собой, для каждого главного здания нужно будет создавать переменную и связывать её со зданием, ничего тут сложного нет, главное внимательность.
ответ
"Далеко твоя рпг не уйдёт" моя рпг тебя переживет.
Ты тоже когда родился не умел так нагло хамить незнакомым людям, научился же как то. Люди с более серьезным отношением к миру чем "изменить систему один не могу но буду плакать об этом" могут изучить все что захотят и даже в одиночку будут стоить больше чем тысяча "всегда сдающихся" людей,
и тот человек (Да удалось, даже был лаунчер для этой игры. Forgotten Land) это подтвердил, хотя я уверен что он быстро опустил руки.
p.s чел прекращай настраивать других людей на поражение, если ты что-то можешь дать - дай, если хочешь чтобы другие не добились успеха чтобы ты оказался прав и не чувствовал себя ущербным то просто отойди в сторону.
Я на все твои выпады отвечу лишь одной фразой:
"Dota была обычной картой для warcraft 3 и она поначалу тоже была пустой ".
Ответы получены, пару шарящих людей нашел, (дай бог каждому такого человека который рассказал мне о многом что тут считают до сих пор невозможным)
Спасибо за поддержку! и особенно одному пользователю. Ведь именно благодаря таким людям как life2smiler, люди не делают хорошие проэкты а другие люди соответственно вынуждены играть в некачественные карты и в течении нескольких лет не находить решения наболевших проблем
(если нет хотя бы 1 го человека кому удалось сделать что-то необычное то все остальные продолжат считать это невозможным) А сегодня стало ясно что могут не знать о чем либо не только потому что никто не делал этого, а потому что человек на самом деле сделал но никому говорить не стал :)
ответ
вот стандартный набор функций мили игры в триггере инициализации:
    call MeleeStartingVisibility(  )
    call MeleeStartingHeroLimit(  )
    call MeleeGrantHeroItems(  )
    call MeleeStartingResources(  )
    call MeleeClearExcessUnits(  )
    call MeleeStartingUnits(  )
    call MeleeStartingAI(  )
    call MeleeInitVictoryDefeat(  )
По названиям функций думаю понятно что они делают, рассмотрим по подробнее MeleeInitVictoryDefea( )
function MeleeInitVictoryDefeat takes nothing returns nothing
    local trigger    trig
    local integer    index
    local player     indexPlayer

    // Create a timer window for the "finish soon" timeout period, it has no timer
    // because it is driven by real time (outside of the game state to avoid desyncs)
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)

    // Set a trigger to fire when we receive a "finish soon" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)

    // Set a trigger to fire when we receive a "finish now" game event
    set trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)

    // Set up each player's mortality code.
    set index = 0
    loop
        set indexPlayer = Player(index)

        // Make sure this player slot is playing.
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set bj_meleeDefeated[index] = false
            set bj_meleeVictoried[index] = false

            // Create a timer and timer window in case the player is crippled.
            set bj_playerIsCrippled[index] = false
            set bj_playerIsExposed[index] = false
            set bj_crippledTimer[index] = CreateTimer()
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))

            // Set a trigger to fire whenever a building is cancelled for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)

            // Set a trigger to fire whenever a unit dies for this player.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)

            // Set a trigger to fire whenever a unit begins construction for this player
            set trig = CreateTrigger()
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)

            // Set a trigger to fire whenever this player defeats-out
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)

            // Set a trigger to fire whenever this player leaves
            set trig = CreateTrigger()
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)

            // Set a trigger to fire whenever this player changes his/her alliances.
            set trig = CreateTrigger()
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
        else
            set bj_meleeDefeated[index] = true
            set bj_meleeVictoried[index] = false

            // Handle leave events for observers
            if (IsPlayerObserver(indexPlayer)) then
                // Set a trigger to fire whenever this player leaves
                set trig = CreateTrigger()
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop

    // Test for victory / defeat at startup, in case the user has already won / lost.
    // Allow for a short time to pass first, so that the map can finish loading.
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
endfunction
Вроде много, но тут все просто, создается три триггера один следит за тем сколько построил зданий любой играющий игрок, второй следит сколько зданий погибло у любого играющего игрока, ну а третий следит за теми кто ливнул, чтобы их не преребирать, два прочих вспомогательные, следят за отмненой строительства и прочее.
Итого делаем вывод, чтобы узнать проиграл или нет игрок, нам нужно узнать сколько у него живых зданий, меньше 1 игрок проиграл. А реализовать это можно как угодно, триггерами следящими за смертями и прочим или таймером, который будет переодически считать все здания каждого игрока и давать поражение тем игрокам у кого не осталось ни одного здания...
ответ
eriel222, например, у тебя есть 8 рас: 4 стандартные + тролли, иглогривы, огры, големы. Игрок не сделал выбор, в результате чего запускаем триггер с действиями: установить значение переменной равным случайному числу от 1 до 8 (переменная должна быть целочисленной), а потом проходиться условиями. Если число равно 1, то создать юнитов для расы альянс (в списке действий для режима сражения такая функция даже есть) в указанной точке и т.д. Следует уточнить, что для нестандартных рас расписывать создаваемых юнитов придется самостоятельно (например, создать домик троллей + 5 троллей-рабочих).
Увы, в игре игроку расу не назначить функцией. Можно лишь создать необходимых юнитов.

23

» WarCraft 3 / Ошибка

Похожие вопросы:

ответ
Так ты всю либо кинь.
кат
//=====================================================================================================\\
library MainBar initializer InitSetBar

    native UnitAlive takes unit u returns boolean

    globals
        constant real br_updatePeriod = 0.2 //период обновления баров.
        integer array br_indHP //сохраняет текущий индекс модели хпбара,  чтобы сравнить, изменился ли он.
        integer array br_indMP //сохраняет текущий индекс модели мпбара,  чтобы сравнить, изменился ли он.
        integer array br_abilityHP
        integer array br_abilityMP
        integer br_unitCounter = 0
        effect array br_effHP //записывает хпбар, чтобы его можно было удалить и заменить другим.
        effect array br_effMP //записывает хпбар, чтобы его можно было удалить и заменить другим.
        region br_mapArea = null
        unit array br_unit
        boolean array br_unitIntimer
    endglobals
    
    nothing SetBar( ){ 
        integer i = 1
        integer iend = br_unitCounter
        integer indHP
        integer indMP
        loop{
            exitwhen i > iend
            if (UnitAlive(br_unit[i])) {
                indHP = R2I(GetUnitLifePercent(br_unit[i])/5)
                if (br_indHP[i] != indHP)  {
                    UnitRemoveAbility(br_unit[i], br_abilityHP[br_indHP[i]])
                    UnitAddAbility   (br_unit[i],  br_abilityHP[indHP])
                    br_indHP[i] = indHP
                }
                indMP = R2I(GetUnitManaPercent(br_unit[i])/5)
                if (br_indMP[i] != indMP) and (GetUnitState(br_unit[i], UNIT_STATE_MAX_MANA) > 0) {
                    UnitRemoveAbility(br_unit[i], br_abilityMP[br_indMP[i]])
                    UnitAddAbility   (br_unit[i],  br_abilityMP[indMP])
                    br_indMP[i] = indMP
                }
            }
            i++
        }
    }

    nothing TimerStartEx ( timer whichTimer, real period, boolean isPeriodic, code handlerFunc, integer userData ){ 
        TimerStart(whichTimer, I2R(userData), false, null)
        PauseTimer(whichTimer)
        TimerStart(whichTimer, period, isPeriodic, handlerFunc )
    }
 
    integer TimerGetUserData ( timer whichTimer ){ 
        return R2I(TimerGetRemaining(whichTimer )+0.5)
    }

    nothing ClearIDBar () {
        timer t = GetExpiredTimer()
        integer id = TimerGetUserData(t)
        if UnitAlive(br_unit[id]) == false {
            br_unit[id] = br_unit[br_unitCounter]
            br_effHP[id] = br_effHP[br_unitCounter]
            br_effMP[id] = br_effMP[br_unitCounter]
            br_indHP[id] = br_indHP[br_unitCounter]
            br_indMP[id] = br_indMP[br_unitCounter]
            br_unit[br_unitCounter] = null
            br_effHP[br_unitCounter] = null
            br_effMP[br_unitCounter] = null
            br_indHP[br_unitCounter] = 0
            br_indMP[br_unitCounter] = 0
            br_unitCounter = br_unitCounter - 1
        } else
        br_unitInTimer[id] = false
        DestroyTimer(t)
        t = null
    }
    
    nothing ClearRemoteUnits() {
        integer i = 1
        integer iend = br_unitCounter
        loop{
            exitwhen i > iend
            if (br_unit[i] == null) and (br_unitInTimer[i] == false) {
            BJDebugMsg("null " + I2S(i))
            }
            i++
        }
    }

    nothing ClearBarDeath ( ){ 
        integer i = 1
        integer iend = br_unitCounter
        integer id
        loop {
            exitwhen i > iend
            if br_unit[i] == GetTriggerUnit() {
                DestroyEffect(br_effHP[i])
                DestroyEffect(br_effMP[i])
                id = i
            }
            i++
        }
        timer t = CreateTimer()
        br_unitInTimer[id] = true
        TimerStartEx(t, 88, false, function ClearIDBar, id)
        t = null
    }
    
    nothing InitSetBar(){ 
        EnablePreSelect(false, false) //скрывает полоски здоровья и информацию при наведении на юнита.
        br_abilityHP[0] = 'HP00'
        br_abilityHP[1] = 'HP01'
        br_abilityHP[2] = 'HP02'
        br_abilityHP[3] = 'HP03'
        br_abilityHP[4] = 'HP04'
        br_abilityHP[5] = 'HP05'
        br_abilityHP[6] = 'HP06'
        br_abilityHP[7] = 'HP07'
        br_abilityHP[8] = 'HP08'
        br_abilityHP[9] = 'HP09'
        br_abilityHP[10] = 'HP10'
        br_abilityHP[11] = 'HP10'
        br_abilityHP[12] = 'HP12'
        br_abilityHP[13] = 'HP13'
        br_abilityHP[14] = 'HP14'
        br_abilityHP[15] = 'HP15'
        br_abilityHP[16] = 'HP16'
        br_abilityHP[17] = 'HP17'
        br_abilityHP[18] = 'HP18'
        br_abilityHP[19] = 'HP19'
        br_abilityHP[20] = 'HP20'
        br_abilityMP[0] = 'MP00'
        br_abilityMP[1] = 'MP01'
        br_abilityMP[2] = 'MP02'
        br_abilityMP[3] = 'MP03'
        br_abilityMP[4] = 'MP04'
        br_abilityMP[5] = 'MP05'
        br_abilityMP[6] = 'MP06'
        br_abilityMP[7] = 'MP07'
        br_abilityMP[8] = 'MP08'
        br_abilityMP[9] = 'MP09'
        br_abilityMP[10] = 'MP10'
        br_abilityMP[11] = 'MP11'
        br_abilityMP[12] = 'MP12'
        br_abilityMP[13] = 'MP13'
        br_abilityMP[14] = 'MP14'
        br_abilityMP[15] = 'MP15'
        br_abilityMP[16] = 'MP16'
        br_abilityMP[17] = 'MP17'
        br_abilityMP[18] = 'MP18'
        br_abilityMP[19] = 'MP19'
        br_abilityMP[20] = 'MP20'
        integer i = 0
        integer iend = 20
        unit u = CreateUnit( Player(0), 'hfoo' , 0, 0, 0)
        loop {
            exitwhen i > iend
            UnitAddAbility(u, br_abilityHP[i])
            UnitAddAbility(u, br_abilityMP[i])
            i++
        }
        KillUnit(u)
        RemoveUnit(u)
        u = null
        TimerStart(CreateTimer(), br_updatePeriod, true, function SetBar )
        TimerStart(CreateTimer(), 30, true, function ClearRemoteUnits)
        trigger trg_br_ClearIDBarDeath = CreateTrigger( )
        TriggerRegisterAnyUnitEventBJ( trg_br_ClearIDBarDeath, EVENT_PLAYER_UNIT_DEATH )
        TriggerAddAction( trg_br_ClearIDBarDeath, function ClearBarDeath )
    } 
 
endlibrary
 //=====================================================================================================\\
Ошибка была в том, что при удалении блока else, удалил только скобки, а else оставил.
ответ
Нужен 139 мдлвис
ответ
это разные функции, локалку сделали в одной, а в другой ее записываете. это как если бы вы поставили дома у себя холодильник, потом пришли к соседу и ищете свой холодильник что бы положить туда яйца
используйте глобалки

23

» WarCraft 3 / спавн предметов

Похожие вопросы:

ответ
Diaboliko, у предметов с этим бага
юзай юнитов
с ними намного проще
ответ
Ну что может быть проще?
Событие юнит игрока умирает (или всех игроков)
Условие - Уровень твоей пассивки у убившего юнита больше 0
Действие создать предмет в координатах убившего юнита.
Для случайных предметов создай массив и юзай GetRandomInt.
ответ
Во-первых, существует GetSpellTargetX() и GetSpellTargetY(), а во-вторых, не пользуйтесь точками.

В памяти игры существует пресозданная таблица локейшнов, используемый для реализации поиска пути и ещё каких-нибудь сервисных нужд, и подавляющее число нативных функций, которые возвращают location, не создают эту самую локацию из воздуха, а делают копию локейшна из таблицы. Реальный алгоритм того, какую именно локацию получаешь на выходе скрыт, технически его можно выяснить, но для практических нужд это не имеет смысла.
ответ
Можно не замедлять а реже спавнить их, каждые десять секунд проверять, если кол-во цветов больше 4 то рандомное число от 1 до 12, если число <= 4 (т.е 25%) то создать растение.
ответ
NazarPunk, Прошу прощения, был не прав.
Deleted

Вот так выглядит нормальный вариант
Переменная Тип предмета

23

» WarCraft 3 / Золото у рудника 0

Похожие вопросы:

ответ
Мне прям стыдно -_-
Хах, я идиот, все поменял
ответ
Ловишь приказ строительства рудника, находишь ближайший рудник (вообще, это приказ "цель- юнит", и можно ссылаться на рудник напрямую, но на всякий случай опишу более общий вариант), запоминаешь золото, после постройки добавляешь столько золота в свой рудник.
ответ
Black Soul:
Проблема в оплетенном руднике. Он изначально сделан коряво. Создавай простой рудник и оплетай его древом через триггеры:
Именно так сделано в оригинальных кампаниях.

23

» WarCraft 3 / Изменение количества урона

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.

23

» WarCraft 3 / Проблема при загрузке карты

Похожие вопросы:

ответ
скорее всего ты при инициализации проверяешь статус слота игрока, а этого делать нини ))) ибо это частенько может приводить к десинку, вот эти игроки и получают его благополучно во время инициализации)))
ответ
Halian Izverg:
Может, все дело в переменных? Попробуй в настройках поставить галочку копировать переменные вместе с триггерами или, если не сработает для твоего глючного редактора, попробуй скопировать переменные вручную перед триггерами.
ответ
PhysCraft, да, карта вполне могла сломаться при пересылке. Попробуй переслать обратно и проверить откроется ли она у твоего напарника.
ответ
В мпк редакторе открой карту да удали модель, вот и все.
ответ
~8gabriel8:
Если здание изначально без магазина или с магазином, то после апгрейда этот магазин у него и останется.
Делай триггер с событием Unit Завершает улучшение и действием Replace (Triggering unit) with a (Unit-type of (Triggering unit)), в условие (unit-type of (Triggering unit)) равно Твоё_здание. Ещё бы надо отслеживать, было ли выбрано здание, если да, то добавлять его в выбор, а то после замены выбор слетает.

23

» WarCraft 3 / Экран Статистики

Похожие вопросы:

ответ
скопировать путь отсюда - дело 5 секунд

а так придется реимпортировать иконки в карту и писать им свой путь, в итоге вырастет вес
и никому это не нужно
ответ
свой события конец игры
очишаем все героя после смены нетралов..
триггер конец игры
ответ
К сожалению, никак, можно воздействовать только на ресурсы и героев (удалением их или передачей нейтральному) на экране статистики.

23

» WarCraft 3 / native и constant native

Похожие вопросы:

ответ
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
ответ
эти функции зовутся enum-ераторы, они служат оберткой для жасса и просто представляют собой константу-число. Испольлзуются, чтобы ты не подсунул тупому жассу какой-нибудь мусор вместо разрешенных чисел, т.к. фильтровать числа сложнее, чем такие константы.
У типа атаки нет ограничения сверху в версии 1.26, что позволяет вылезать выше разрешенного кол-ва атак, но тогда и коэф урона по броне будет браться с потолка - памяти, которая содержит ваще другие данные, но всегда одни и те же в плане порядка - макс скорость существ, макс скорость зданий, и т.п. Строить на этом что-то можно, если разведать, к каким данным попадает игра, но смысла мало. В прошлом я видел исследования на эту тему уже.
Ивенты являются просто числами, и обычно не пересекаются, за редким исключением. Поэтому у тебя ConvertPlayerEvent(259) == ConvertGameEvent(259), это 259 == 259 в игре. Типы в игре вообще не имеют значения, если жестко не прописано в условии, а при математическом сравнении тип не проверяется. Скормить триггерам можно любой номер, опять же, но в каждом, куда я заходил, стояли проверки на входе на скормленное число, поэтому пользоваться этим бесполезно. Плюс все триггеры вызываются вследствие того, что их вызывает игра по событию. Те события, к которым невозможно сейчас привязать триггер. всё равно не будут вызывать привязанный каким-либо хак-способом триггер.

23

» WarCraft 3 / Крепление юнита к эффекту

Похожие вопросы:

ответ
вот, выбирается
так как там нет геометрии (а только источники частиц), то так просто в один клик не рассчитываются границы
надо вручную создавать объект "форма" с нужным радиусом и координатами, в редакторе узлов model editor'а
ответ
В редакторе скелета
ответ
В модел эдиторе перенеси нужную кость в начало координат и в ключевых фреймах пропиши одинаковые координаты для этой кости. Вот и проверишь.

23

» WarCraft 3 / Несколько бафов.

Похожие вопросы:

ответ
WW перестаёт становиться DIS, когда у героя более одной абилки WW
типа что бы ты мог активировать другой, пока работает первый... но разблокировка идёт на все сразу (и на сам себя тоже)
ответ
У вайпера "Corrosive Skin" сделано на событии получения урона выше опред. порога (вроде выше 2.00).
Если охото чтобы именно дебафнуть в момент нанесения тычки, то тут нужно 2 триггера, 1 который следит (юнит атакован) и запускат таймер на скмжем 2 сек.
Второй триггер ждет что кто то (атакуемый или атакующий) сдохнет, время выйдет, атакующий отдаст приказ без указания цели, атакуемый получит урон.
Добавляя атакуемому скилл на основе рунных браслетов (-2.00 фактор резиста) и отсеиваем весь урон от заклинаний (ну наносим его юниту еще раз, но удалив браслеты и снизив хп) а если урон физический и источник урона на наз замахивался,последние 2 сек, + не успел отдать приказ без указания цели то его баффаем.
Если совсем лень, скачиваем систему отлова физического урона.
ответ
Steal nerves:
вот, смотри триггер cast и способность "Божественный щит" в карте
xgm.guru/p/wc3/179535?postid=336091#comment72 ищи 72 коммент, костыльный
xgm.guru/p/wc3/179535?postid=336719#comment142 ищи 142 коммент, это то что в карте
ответ
посмотри как у урсы сделано
Там и скорость атаки (со счетчиком ударов) есть и алгоритм добавления зеленого урона

23

» WarCraft 3 / Условие на неуязвимость

Похожие вопросы:

ответ
Если юнит под баффом "чума" - добавить в отряд Чума
Иначе - удалить из отряда Чума
Триггер
С. Таймер Чума
Отряд выбрать юнитов Чума
Если юнит умер
Д. создать юнита в позиции выбранного юнита.
ответ
что за костыли блин
событие - приводит способность в действие
условие - применённая способность == божественный щит
действия:
unit u=GetTriggerUnit()
SetUnitVertexColor(u,0,0,0,255)
TriggerSleepAction(15) // здесь указываем время действия способности
SetUnitVertexColor(u,255,255,255,255)
если время действия зависит от уровня то юзай арифметику как писали выше
в твоём случае это 2 + (уровень способности * 2)
ответ
Неуязвимость проверяют через даммика с атакой, через приказ, сможет ли атаковать или нет, просто проверка выполнения приказа. Так же пытаются нанести урон и смотрят сколько он отнял здоровья, так можно и определить неуязвимость и вычислить резист юнита к конкретному типу урона.

23

» WarCraft 3 / Реплики

Похожие вопросы:

ответ
Такой вопрос уже был: xgm.guru/p/xgm-qa/152743.
Не забудь выбрать ответ.
ответ
К сожалению способ не увенчался успехом, все проверил разумеется.
Может еще где-нибудь надо изменить информацию? только где.
ответ
Я прямо через аудасити пишу в сингл тренировке, тупо, зато совсем нетрудно.
Вот тут еще есть прямо готовые саундсеты хотса (нужна рега). wcunderground.freeforums.org/soundsets-f37.html
По сабжу с архивом помочь не могу, не разбираюсь, но мб это пригодится.
ответ
XGM Bot:
Похожие вопросы:

ответ
ilsva, я решил проверить сам. Поставил на пустую карту алтарь, героя и других юнитов, чтобы убить его. Триггер сделал как у тебя, только без условия и издавать звук я делал от алтаря. - Всё работало. Потом поставил условие на тип героя - так же всё работало. Поэтому возможно проблема в том, что ты делаешь издавать звук от триггерного юнита, а он при этом ещё как бы не создан и его позиция не определена. Попробуй сделать издавать звук от алтаря или же перед тем как издавать звук от юнита - попробуй сделать ждать, например 0.5 сек.
ответ
Не тупи. Сделай трансляцию от ТИПА ЮНИТА, а не от конкретного юнита.
ответ
"Набор звуков" нельзя сделать через триггеры, но можно попробовать через импорт файлов заменить стандартные файлы в уже существующих наборах.
Для этого импортируемому файлу надо прописать путь заменяемого.

ответ
На Arctic RPG смахивает, проверьте.

23

» WarCraft 3 / Получить физ. размер.

Похожие вопросы:

ответ
Событие: Юнит приводит способность в действие
Условие: Примененная способность = Увечье(или что там)
Действие: Уменьшить размер цели заклинания(не имею понятия как там это будет называться, но суть такова)
ответ
C++ тоже показывает 832.0, на С почему-то не смог запустить.
UrsaBoss, вообще, используй нативки, они точнее будут нахождения дистанции "руками" в данном случае. Но не используй Pow(), эта функция очень неточная.
constant native IsUnitInRange       takes unit whichUnit, unit otherUnit, real distance returns boolean
constant native IsUnitInRangeXY     takes unit whichUnit, real x, real y, real distance returns boolean
constant native IsUnitInRangeLoc    takes unit whichUnit, location whichLocation, real distance returns boolean
ответ
Дело в том,что у каждом здания в варке,имеется своеобразный фундамент и как раз этот фундамент и есть непроходимая зона в здании.
Нет. За проходимость отвечает карта путей, как подметил prog. А то, о чем ты говоришь это просто текстура почвы под зданиями, которую можно сменить в поле РО uberSplat (Графика - текстура почвы). А карту путей можно изменить в поле pathTax (Пути - карта путей).